package com.lm.cloud.utils;

import com.lm.cloud.enums.ReturnCodeEnum;
import com.lm.cloud.exception.ServiceException;

/**
 * 通用异常工具类
 */
public class ThrowUtil {

    /**
     * 当条件为真时抛出异常
     *
     * @param condition 是否满足抛出异常的条件
     * @param exception 要抛出的异常
     */
    public static void throwIf(boolean condition, RuntimeException exception) {
        if (condition) {
            throw exception;
        }
    }

    /**
     * 当条件为真时抛出异常
     *
     * @param condition 是否满足抛出异常的条件
     * @param errorCode 错误码，用于在对象为null时创建ServiceException
     */
    public static void throwIf(boolean condition,ReturnCodeEnum errorCode) {
        if (condition) {
            throw new ServiceException(errorCode);
        }
    }

    /**
     * 根据条件抛出服务异常
     *
     * @param condition 条件判断，若为真则抛出异常
     * @param errorCode 错误代码，用于标识特定的错误类型
     * @param errorMsg 错误信息，描述错误的详细情况
     */
    public static void throwIf(boolean condition,String errorCode,String errorMsg) {
        if (condition) {
            throw new ServiceException(errorCode,errorMsg);
        }
    }

    /**
     * 检查对象是否为null，并在为null时抛出自定义异常
     *
     * @param object 待检查的对象。可以是任何类型的对象
     * @param errorCode 错误代码，用于标识异常的类型
     * @param errorMsg 错误消息，用于描述异常的详细信息
     */
    public static <T> void throwIfNull(T object,String errorCode,String errorMsg) {
        if (object == null) {
            throw new ServiceException(errorCode,errorMsg);
        }
    }

    /**
     * 检查对象是否为null，并在为null时抛出指定错误码的异常
     *
     * @param object 待检查的对象，可以是任何类型
     * @param errorCode 错误码，用于在对象为null时创建ServiceException
     * @throws ServiceException 如果对象为null，则抛出此异常，异常中包含指定的错误码
     */
    public static <T> void throwIfNull(T object, ReturnCodeEnum errorCode) {
        if (object == null) {
            throw new ServiceException(errorCode);
        }
    }
}
